package 算法.NiuKe.JZ;

/**
 * @author:谢君臣
 * @Date:2021/4/3015:58
 * @version:1.0
 * @function:   给你一根长度为n的绳子，请把绳子剪成整数长的m段（m、n都是整数，n>1并且m>1，m<=n），每段绳子的长度记为k[1],...,k[m]。
 *    请问k[1]x...xk[m]可能的最大乘积是多少？例如，当绳子的长度是8时，我们把它剪成长度分别为2、3、3的三段，此时得到的最大乘积是18。
 */
public class JZ68 {
    public int cutRope(int target) {
        if (target<=2)
            return target;
        int max = target/2,count = 0;
        for (int i = 2; i < max; i++) {
            count = Math.max(count,getCount(target,i));
        }
        return count;
    }

    private int getCount(int target, int i) {
        int[]length = new int[i];
        int temp = target/i;
        for (int j = 0; j < length.length; j++) {
            length[j] = temp;
        }
        temp = temp*i;
        i=0;
        while (temp<target){
            temp = temp+1;
            length[i] = length[i]+1;
            i++;
        }
        temp = 1;
        for (int j = 0; j < length.length; j++) {
            temp = temp*length[j];
        }
        return temp;
    }
}
